<?php
//current page 当前页面
//total number of records 总记录数
//pagesize页面大小
//Number of links 链接数目
//request parameter
//intarray(当前页，数组的长度即总记录
//数，)

//$array要分页显示的数组
//$nCurrentPage当前页
//&$content当前显示数的内容
//$url 当前页面的url
//$requestParas='&' 例如 &str=dfadf&action=del
//$pageSize 每页显示的记录数，每页显示数组的多少项
//显示的链接数量  首页 第一页 1 2 3 4 5 6 7 8 9 10 11 末页
//此例中$numberOfLinks=11
function _array_pagination($array,$nCurrentPage=2,&$content,$url='',$requestParas='&',$pageSize=50,$numberOfLinks=8,$totalNumberOfRecords='empty'){
	$tNORes       ; $nCurrentPageMax  ; $nCurrentPage ;
    $nCurrentPage ; $nL               ;  $arrKeyStart ;
	CaPagination::checkVars($array,$nCurrentPage,$content,$url,$requestParas,$pageSize,$numberOfLinks ,$totalNumberOfRecords,$tNORes,$nCurrentPageMax,$arrKeyStart,$nL);
    //向数组填充内容
	CaPagination::fillContent($array,$arrKeyStart,$pageSize,&$content);
	
    //计算输出的链接数
    $countOutLinksNum =   0   ;
	//计算第一个链接的page值
	$startLinkVal    = 'empty';
	//计算最后一个链接的page值
	$endLinkVal      = 'empty';
    
	$outlinks = CaPagination::outlinks($url,$requestParas,$numberOfLinks,$nL,$nCurrentPage,$nCurrentPageMax
	,$countOutLinksNum,$endLinkVal,$startLinkVal);
 
	$ret=CaPagination::firstAndPrevious($url,$requestParas,$nCurrentPage)
	.CaPagination::insertLinksAtBeg(
	$url,$requestParas,$numberOfLinks,$countOutLinksNum,$startLinkVal)
	.$outlinks
	.CaPagination::insertLinksAtEnd(
	$url,$requestParas,$numberOfLinks,$countOutLinksNum,$nCurrentPageMax,$endLinkVal
	)
	.CaPagination::nextAndUltimate($url,$requestParas,$nCurrentPage,$nCurrentPageMax)
	.CaPagination::autogo($url,$requestParas);

	return  '<div class="pagehref" style="border:1px solid #888; margin-top:-20px;">'.$ret.'</div>';
}

class CaPagination{
	public static function checkVars($array,&$nCurrentPage,&$content,$url,$requestParas,$pageSize,$numberOfLinks ,$totalNumberOfRecords,&$tNORes,&$nCurrentPageMax,&$arrKeyStart,&$nL){
	$tNORes=$totalNumberOfRecords=='empty'? count($array) : $totalNumberOfRecords;
    
	$nCurrentPageMax=ceil( $tNORes / $pageSize );
	
	$nCurrentPage = preg_replace("/[^0-9]{1,}/","",$nCurrentPage);
	 
	$nCurrentPage = ( empty($nCurrentPage) )? 6 : $nCurrentPage ;
	if($nCurrentPage>$nCurrentPageMax){$nCurrentPage=$nCurrentPageMax;}
	
	//$nL 为nLinkValutStart; 
	$nL=($nCurrentPage-floor($numberOfLinks/2)-1);
	
	$arrKeyStart=($nCurrentPage-1)*$pageSize;
		
		
	}
	/*
	@parm3 当前页
	作用：得到首页和前一页的链接
	*/
	public static function firstAndPrevious($url,$requestParas,$nCurrentPage){
	    $firstUp='<a href="'.$url.'?page=1'.$requestParas.'" blank="_self" >F</a>'."\n";
	    if($nCurrentPage>1){
	        $firstUp.='<a href="'.$url.'?page='.($nCurrentPage-1).$requestParas.
	       '" blank="_self" >PRE'. '</a>'."\n";
	    }
		return  $firstUp;	
	}
	/*
	@parm3 当前页
	@parm4 $nCurrentPageMax 最多可以分为多少页 ceil( 总条数除以每页的记录数 )
	作用：得到下一页和最后一页的链接
	*/
	public static function nextAndUltimate($url,$requestParas,$nCurrentPage,$nCurrentPageMax){
		$ret='';
	if($nCurrentPage<$nCurrentPageMax){
	    $ret.= '<a href="'.$url.'?page='.($nCurrentPage+1).$requestParas.
	    '" blank="_self" >NEXT'.'</a>'."\n";
	}
	    $ret=$ret.'<a href="'.$url.'?page='.($nCurrentPageMax).$requestParas.
	'" blank="_self" >END'.($nCurrentPageMax).'</a>';	
	return $ret;	
	}
	/*
	@parm1 当前网页地址
	@parm2 get 参数
	作用:自动跳转功能
	*/
    public static function autogo($url,$requestParas){
	return '<kbd><input type="text" name="custompage" size="3" style="height:14px; font-size:14px;" onkeydown="if(event.keyCode==13) {window.location=\''
 . $url .'?'.$requestParas.'&page=\'+this.value; return false;}" /></kbd>';	
	}	
	
	/*
	@parm3 $numberOfLinks 显示多少个链接
	@parm4 $countOutLinksNum 计算实际输出了多少个链接，不够的话就补上
    @parm5 $nCurrentPageMax 最多可以分为多少页 ceil( 总条除以以每页的记录数 )
	@parm6 $endLinkVal 前面输出的最一个链接的page值
	作用:补右边空缺的链接
	*/
	public static function insertLinksAtEnd($url,$requestParas,$numberOfLinks,$countOutLinksNum,$nCurrentPageMax,$endLinkVal){
		$ret = '';
		 
	    for($k=1;$k<= $numberOfLinks- $countOutLinksNum ;$k++){	
		    //这里进行最大判断超出最大页数将不会输出
	        if($endLinkVal+$k<$nCurrentPageMax){
	            $ret.='<a href="'.$url.'?page='.($endLinkVal+$k)
	            .$requestParas.'" blank="_self" style="color:green;" >'
	            .($endLinkVal+$k)."</a>\n";	
		    }
	    }	
		return $ret;
	}
	/*
	补左边空缺的链接，变量是左边空缺链接的具体内容
	$startLinkVal 前面输出的第一个链接的page值
	*/
	public static function insertLinksAtBeg(
	$url,$requestParas,$numberOfLinks,$countOutLinksNum,$startLinkVal) {	
	    $arrayLeftLinks=array();
	    for($k=1;$k<= $numberOfLinks- $countOutLinksNum ;$k++){		
            if(($startLinkVal-$k)>0){
	            $arrayLeftLinks[]='<a href="'.$url.'?page='.($startLinkVal-$k)
	            .$requestParas.'" blank="_self" style="color:red;" >'
	            .($startLinkVal-$k)."</a>\n";	
		    }
	
	    }
	     return implode(  "" , array_reverse($arrayLeftLinks) );
	}
	
	
	public static function fillContent($array,$arrKeyStart,$pageSize,&$content){
		$ic=0;
	    foreach($array as $k => $v){
		    if($arrKeyStart<=$ic and $ic<$arrKeyStart+$pageSize and $ic<count($array)){
	        $content[$k]=$v."<br>";
		    }
		    $ic++;		
	    }
	$content['sql']=' limit '.$arrKeyStart.', '.$pageSize;		
	}
	/*
	输出链接
	此时没有修正
	*/
	public static function outlinks($url,$requestParas,$numberOfLinks,$nL,$nCurrentPage,$nCurrentPageMax
	,&$countOutLinksNum,&$endLinkVal,&$startLinkVal){
		$ret = '';
	    for ($i=1;$i<$numberOfLinks+1;$i++){	
	        if(($nL+$i)==$nCurrentPage){
				$style="style='background-color:#0066cc;color:#fff'";
			}else {
				$style="";
			}
	    //$nL可能为负数
	        if(($nL+$i)>0 and ($nL+$i)<=$nCurrentPageMax){
		    $ret=$ret.'<a '.$style.' href="'.$url.'?page='.($nL+$i).$requestParas.'" blank="_self" >'
	        .($nL+$i).'</a>'."\n" ;
		     $startLinkVal=="empty"?$startLinkVal=$nL+$i : true ;
		     $endLinkVal=$nL+$i;
		     $countOutLinksNum++;
		    }
        }	
		return $ret;
	}
	/*
	设置链接样式
	*/
	public static function  style($color='#0066cc',$clstr='.pagehref'){
	$str="<style>".chr(10);
	$str.=str_repeat('  ',2).$clstr.' a{'.chr(10);	
	$str.=str_repeat('  ',2).'font-weight:bold; '.$color.' ;'.chr(10);
	$str.=str_repeat('  ',2).'border:solid 1px; '.$color.' ;'.chr(10);
	$str.=str_repeat('  ',2).'font-size:12px;'.chr(10);
	$str.=str_repeat('  ',2).'color:'.$color.';'.chr(10);
	$str.=str_repeat('  ',2).'text-decoration:none;'.chr(10);
	$str.=str_repeat('  ',2).'background-color:#fff;'.chr(10);
	$str.=str_repeat('  ',2).'padding:2px 6px 2px 6px;'.chr(10);
	$str.=str_repeat('  ',2).'margin:2px 2px  2px 2px;'.chr(10);
	$str.=str_repeat('  ',2).'overflow:hidden; line-height:100%;width:40px'.chr(10);
	$str.=str_repeat('  ',2).'}'.chr(13);
	$str.=str_repeat('  ',2).$clstr. ' a:hover{'.chr(10);
	$str.=str_repeat('  ',2).'background-color:'.$color.';'.chr(10);
	$str.=str_repeat('  ',2).'font-weight:bold;'.chr(10);
	$str.=str_repeat('  ',2).'color:#FFFFFF;'.chr(10);
	$str.=str_repeat('  ',2).'}'.chr(10);
	$str.=str_repeat('  ',2).$clstr. '{'.chr(10);
	$str.=str_repeat('  ',2).'font-size:12px;'.chr(10);
	$str.=str_repeat('  ',2).'color:'.$color.';'.chr(10);
	$str.=str_repeat('  ',2).'margin:2px 0px 2px 0px;'.chr(10);
	$str.=str_repeat('  ',2).'}'.chr(10);
	$str.=str_repeat('  ',2).$clstr.' input {'.chr(10);
	$str.=str_repeat('  ',2).'height:14px; '.chr(10);
	$str.=str_repeat('  ',2).'border:solid 1px '.$color.';'.chr(10);
	$str.=str_repeat('  ',2).'}'.chr(10);
	$str.='</style>'.chr(10);
	return $str;
}

	
}
?>